﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using QLHXNK.BusinessLogic;

namespace QLHXNK
{
    public partial class FrmNhapChiPhiHangThang : Form
    {
        #region Properties
        String MonthName = "";
        int MonthLyExpensesID = -1;
        int ExpensesID = -1;

        /// <summary>
        /// action= 0:Thêm tháng, 1:Xóa tháng, 2: Sửa tháng, 3:Thêm chi tiết chi phí, 4:Xóa chi tiết chi phí, 5:Sửa chi tiết chi phí
        /// </summary>
        int action = -1;

        #endregion
        public FrmNhapChiPhiHangThang()
        {
            InitializeComponent();

            lblNote.Visible = false;

            getDataGridViewSource(2);
            
        }

        private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e)
        {

        }
        #region Hàm hỗ trợ
        private void prepareInsertMonthlyExpenses()
        {
            //Lấy tháng hiện tại:
            DateTime today = DateTime.Today;
            String month = ((today.Month < 10) ? ("0" + today.Month.ToString()) : today.Month.ToString()) + "/" +today.Year.ToString();
            FillData(month, "");

            //state controls:
            StateData(true, Color.White);
            dgvChiTietChiPhiHangThang.Visible = false;

            dgvChiPhiHangThang.Enabled = false;
            btnXoaChiPhiHangThang.Enabled = false;
            btnSuaChiPhiHangThang.Enabled = false;

            //btnThem.Enabled = false;
            //btnSua.Enabled = false;
            //btnXoa.Enabled = false;

            action = 0;
            ShowNote("Hãy nhập thông tin rồi click Lưu", Color.Blue);
        }

        private int FindRowIndex(ref DataGridView dgv, String column, String key)
        {
            for (int i = 0; i < dgv.Rows.Count; i++)
            {
                if (dgv.Rows[i].Cells[column].Value.ToString() == key)
                    return i;
            }
            return -1;
        }
        /// <summary>
        /// op=0: cả hai, 1: list chi tiết chi phí hàng tháng, 2: list chi phí hàng tháng
        /// </summary>
        /// <param name="op"></param>
        private void getDataGridViewSource(int op)
        {
            if (op == 0 || op == 2)
            {
                DataTable t = Monthly_Expenses.getMonthly_ExpensesList("SELECT month_name, sum(amount) as total_amount FROM Monthly_Expenses GROUP BY month_name");
                dgvChiPhiHangThang.DataSource = t;
                if (t != null)
                {
                    if (MonthName != "")
                    {
                        int i = FindRowIndex(ref dgvChiPhiHangThang, "Thang", MonthName);
                        if (i != -1)
                        {
                            dgvChiPhiHangThang.Rows[i].Selected = true; 
                           
                        }
                        else
                        {
                            if (dgvChiPhiHangThang.Rows.Count > 0)
                                dgvChiPhiHangThang.Rows[0].Selected = true;
                        }
                    }
                    else
                    {
                        if (dgvChiPhiHangThang.Rows.Count > 0)
                            dgvChiPhiHangThang.Rows[0].Selected = true;
                    }
                }
                else
                {
                    ShowNote("Chưa có danh sách chi phí hàng tháng", Color.Blue);
                }
                
            }

            if (op == 0 || op == 1)
            {
                if (MonthName  != "")
                {
                    String strSQL = String.Format("SELECT m.ID as monthly_expenses_id, e.ID as expenses_id, e.expenses_code, e.expenses_name, m.amount, m.remark FROM Monthly_Expenses m, Expenses e WHERE m.expenses_id = e.ID AND m.month_name = '{0}'", MonthName);
                    DataTable t = Monthly_Expenses.getMonthly_ExpensesList(strSQL);
                    dgvChiTietChiPhiHangThang.DataSource = t;
                    if (t != null)
                    {
                        if (MonthLyExpensesID != -1)
                        {
                            int i = FindRowIndex(ref dgvChiTietChiPhiHangThang, "monthly_expenses_id", MonthLyExpensesID.ToString());
                            if (i != -1)
                            {
                                dgvChiTietChiPhiHangThang.Rows[i].Selected = true;
                            }
                            else
                            {
                                if (dgvChiTietChiPhiHangThang.Rows.Count > 0)
                                    dgvChiTietChiPhiHangThang.Rows[0].Selected = true;
                            }
                        }
                        else
                        {
                            if (dgvChiTietChiPhiHangThang.Rows.Count > 0)
                                dgvChiTietChiPhiHangThang.Rows[0].Selected = true;
                        }
                    }
                    else
                    {
                        ShowNote("Chưa có chi tiết chi phí cho tháng. Bạn hãy cập nhật" + MonthName, Color.Blue);
                    }
                }
            }


        }
        private void ProcessData()
        {
            //Xử lý khoảng trắng:
            txtThang.Text = txtThang.Text.Trim();
            txtTongSoTien.Text = txtTongSoTien.Text.Trim();
        }

        private bool ValidateData()
        {
            bool isValidate = true;

            //Số đơn hàng
            if (txtThang.Text == "")
            {
                errorProvider1.SetError(txtThang, "Bạn chưa nhập tháng");
                isValidate = false;
            }


            //Ngày đơn hàng
            if (txtTongSoTien.Text != "")
            {
                try
                {
                    Double d = Double.Parse(txtTongSoTien.Text);
                }
                catch
                {
                    errorProvider1.SetError(txtTongSoTien, "Tổng số tiền không hợp lệ");
                    isValidate = false;
                }
            }
           
            return isValidate;
        }
        private void FillData(String thang, String tongSoTien)
        {
            txtThang.Text = thang;
            txtTongSoTien.Text = tongSoTien;
        }

        private void StateData(bool state, Color color)
        {
            txtThang.BackColor = color;
            txtTongSoTien.BackColor = color;
           

            txtThang.Enabled = state;
            txtTongSoTien.Enabled = state;

        }


        private void ShowNote(string note, Color foreColor)
        {
            lblNote.Visible = true;
            lblNote.ForeColor = foreColor;
            lblNote.Text = note;
        }
        #endregion

        #region Xóa Monthly_Expenses
      private void  DeleteMonthlyExpensesDetail() //Xóa 1 chi tiết chi phí của tháng
        {
            int result = 0;//số rows deleted
            DialogResult resultDlg = DialogResult.No;

            DataGridViewSelectedRowCollection rows = dgvChiTietChiPhiHangThang.SelectedRows;

            if (rows.Count == 1)
            {

                int ID = -1;

                try
                {
                    ID = int.Parse(rows[0].Cells["monthly_expenses_id"].Value.ToString());
                }
                catch
                {
                    ID = -1;
                }

                if (ID != -1 && ID != 0)
                {
                    resultDlg = MessageBox.Show("Bạn muốn xoá chi tiết chi phí bạn đã chọn", "Xoá", MessageBoxButtons.YesNo);
                    if (resultDlg == System.Windows.Forms.DialogResult.Yes)
                    {
                        result += Monthly_Expenses.Delete(ID);
                    }
                    else
                    {
                        return;
                    }
                }
                else
                {
                    if (dgvChiTietChiPhiHangThang.SelectedRows[0].Index > 0)
                        dgvChiTietChiPhiHangThang.Rows.Remove(rows[0]);
                    return;
                }


            }
            else
            {
                resultDlg = MessageBox.Show("Bạn muốn xoá danh sách chi tiết chi phí bạn đã chọn", "Xoá", MessageBoxButtons.YesNo);
                if (resultDlg == System.Windows.Forms.DialogResult.Yes)
                {
                    for (int i = 0; i < rows.Count; i++)
                    {
                        int ID = -1;

                        try
                        {
                            ID = int.Parse(rows[i].Cells["monthly_expenses_id"].Value.ToString());
                        }
                        catch
                        {
                            ID = -1;
                        }

                        if (ID != -1 || ID != 0)
                        {
                            result += Monthly_Expenses.Delete(ID);
                        }
                    }
                }
                else
                {
                    return;
                }
            }


            //Thong báo kết quả:
            if (result > 0)
            {
                ShowNote("Xóa xong " + result.ToString() + " chi tiết đơn hàng", Color.Blue);
                getDataGridViewSource(1);
                action = -1;
                btnThem.Enabled = true;
                btnXoa.Enabled = true;
                btnSua.Enabled = true;
            }
            else
                ShowNote("Chưa xóa dc! Xin thử lại", Color.Red);
        }
       private void   DeleteMonthly_Expenses() //Xóa 1 tháng
        {
            int result = 0;//số rows deleted
            DialogResult resultDlg = DialogResult.No;

            DataGridViewSelectedRowCollection rows = dgvChiPhiHangThang.SelectedRows;

            if (rows.Count == 1)
            {
                if (dgvChiPhiHangThang.SelectedRows[0].Index >= 0)////////////
                {
                    String monthName = String.Empty;

                    try
                    {
                        monthName = rows[0].Cells["Thang"].Value.ToString();
                    }
                    catch
                    {
                       monthName = String.Empty;
                    }

                    if (monthName != String.Empty)
                    {
                        resultDlg = MessageBox.Show("Bạn muốn xoá tháng đã chọn", "Xoá", MessageBoxButtons.YesNo);
                        if (resultDlg == System.Windows.Forms.DialogResult.Yes)
                        {
                            int r = Monthly_Expenses.Delete(monthName);
                            if (r > 0)
                            {
                                result++;   
                            }
                        }
                        else
                        {
                            return;
                        }
                    }
                    else
                    {
                        if (dgvChiPhiHangThang.SelectedRows[0].Index > 0)
                            dgvChiPhiHangThang.Rows.Remove(rows[0]);
                        return;
                    }
                }

            }
            else
            {
                resultDlg = MessageBox.Show("Bạn muốn xoá danh sách tháng bạn đã chọn", "Xoá", MessageBoxButtons.YesNo);
                if (resultDlg == System.Windows.Forms.DialogResult.Yes)
                {
                    for (int i = 0; i < rows.Count; i++)
                    {
                        String monthName = String.Empty;

                        try
                        {
                            monthName = rows[i].Cells["Thang"].Value.ToString();
                        }
                        catch
                        {
                            monthName = String.Empty;
                        }


                        if (monthName != String.Empty)
                        {
                            int r = Monthly_Expenses.Delete(monthName);
                            if (r == 1)
                            {
                                result++;
                               
                            }
                        }
                    }
                }
                else
                {
                    return;
                }
            }


            //Thong báo kết quả:
            if (result > 0)
            {
                ShowNote("Xóa xong " + result.ToString() + " tháng", Color.Blue);
                getDataGridViewSource(2);
                action = -1;
                btnThem.Enabled = true;
                btnXoa.Enabled = true;
                btnSua.Enabled = true;
            }
            else
                ShowNote("Chưa xóa dc! Xin thử lại", Color.Red);
        }
        #endregion

        #region Lưu

        /// <summary>
        /// action= 0:Thêm tháng, 1:Xóa tháng, 2: Sửa tháng, 3:Thêm chi tiết chi phí, 4:Xóa chi tiết chi phí, 5:Sửa chi tiết chi phí
        /// </summary>
        private void Save()
        {
            lblNote.Visible = false;
            ProcessData();                  //Tiền xữ lý dữ liệu nhập(xử lý khoản trắng...)

            if (ValidateData() == false)
            {
                ShowNote("Dữ liệu không hợp lệ. Hãy kiểm tra lại!", Color.Red);
                return;                     //nếu dữ liệu nhập không hợp lệ thì thoát và thông báo
            }

            if (action == -1)
            {
                ShowNote("Bạn hãy chọn chức năng: Thêm mới, Xoá, Sửa", Color.Green);
                return;
            }

            //Thêm chi phí tháng:
            if (action == 0)
            {
                int r = Monthly_Expenses.Insert(txtThang.Text, "NULL", "NULL", "");
                if (r == 1)
                {

                }
            }

            if (action == 2 && MonthName != "")
            {
                int r = MyDataTransfer.executeNonQueryCommand(String.Format("UPDATE Monthly_Expenses SET month_name = '{0}' WHERE month_name = '{1}'",txtThang.Text, MonthName));
                if (r > 0)
                {
                    ShowNote("Lưu thành công", Color.Green);
                    action = -1;
                    btnXoaChiPhiHangThang.Enabled = true;
                    MonthName = txtThang.Text;
                    getDataGridViewSource(2);
                }
                else
                {
                    ShowNote("Lưu không thành công. Xin thử lại", Color.Green);
                }
            }
        }
        #endregion
        private void dgvChiPhiHangThang_SelectionChanged(object sender, EventArgs e)
        {
            DataGridViewSelectedRowCollection rows = dgvChiPhiHangThang.SelectedRows;
            if (rows.Count == 1)
            {
                FillData(rows[0].Cells["Thang"].Value.ToString(), rows[0].Cells["TongSoTien"].Value.ToString());
                StateData(false, Color.Ivory);
                MonthName = rows[0].Cells["Thang"].Value.ToString();
                getDataGridViewSource(1);
                btnSuaChiPhiHangThang.Enabled = true;
            }
            else
            {
                btnSuaChiPhiHangThang.Enabled = false;
                FillData("", "");
                StateData(false, Color.Ivory);
            }
        }

        private void btnSuaChiPhiHangThang_Click(object sender, EventArgs e)
        {
            action = 2;
            StateData(true, Color.White);
            btnXoaChiPhiHangThang.Enabled = false;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            Save();
        }

        private void btnXoaChiPhiHangThang_Click(object sender, EventArgs e)
        {
            DeleteMonthly_Expenses();

        }

        private void dgvChiTietChiPhiHangThang_SelectionChanged(object sender, EventArgs e)
        {
            DataGridViewSelectedRowCollection rows = dgvChiTietChiPhiHangThang.SelectedRows;
            if (rows.Count == 1)
            {

                DataGridViewRow row = rows[0];
                try
                {
                    MonthLyExpensesID = int.Parse(row.Cells["monthly_expenses_id"].Value.ToString());
                    ExpensesID = int.Parse(row.Cells["expenses_id"].Value.ToString());
                }
                catch
                {
                    MonthLyExpensesID = -1;
                    ExpensesID = -1;
                }


                btnSua.Enabled = true;
                btnXoa.Enabled = true;
                lblNote.Visible = false;////////////
                
            }
            else
            {
                btnSua.Enabled = false;
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            FrmNhapChiTietChiPhiThang frm = new FrmNhapChiTietChiPhiThang(0, MonthName, -1, -1);
            frm.ShowDialog();
            getDataGridViewSource(2);
            getDataGridViewSource(1);
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            FrmNhapChiTietChiPhiThang frm = new FrmNhapChiTietChiPhiThang(2, MonthName, MonthLyExpensesID, ExpensesID);
            frm.ShowDialog();
            getDataGridViewSource(2);
            getDataGridViewSource(1);
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            DeleteMonthlyExpensesDetail();
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnThemChiPhiHangThang_Click(object sender, EventArgs e)
        {
            //prepareInsertMonthlyExpenses();
            //Lấy tháng hiện tại:
            DateTime today = DateTime.Today;
            String newMonth = ((today.Month < 10) ? ("0" + today.Month.ToString()) : today.Month.ToString()) + "/" + today.Year.ToString();
            FrmNhapChiTietChiPhiThang frm = new FrmNhapChiTietChiPhiThang(0, newMonth, -1, -1);
            frm.ShowDialog();

            //update datagridviews:
            getDataGridViewSource(2);
        }
    }
}